#include    <stdio.h>

#include    <sys/types.h>

#include    <dirent.h>


void do_ls(char []);

int main(int argc, char *argv[])
{
    /*如果操作数只有1个，表明ls后面没有带参数，默认为当前目录，.表示当前目录。*/
    if ( argc == 1 )
        do_ls( "." );
    /*如果ls后面有参数，就把参数读入argv中。*/
    else
        while ( --argc ){
            printf("%s:\n", *++argv );
            do_ls( *argv );
        }

    return 0;
}

/*因为ls和dir功能相近，用dir来实现ls*/
void do_ls( char dirname[] )
{
    DIR     *dir_ptr;
    struct dirent   *direntp;

    /*如果没有指向的那个地址，报错*/
    if ( ( dir_ptr = opendir( dirname ) ) == NULL )
        fprintf(stderr,"ls1: cannot open %s\n", dirname);
    else
    {
        /*递归的方式来读取*/
        while ( ( direntp = readdir( dir_ptr ) ) != NULL )
            printf("%s\n", direntp->d_name );
        closedir(dir_ptr);
    }
}
